首页>代码>spring mvc+spring+mybatis框架整合开发基于角色到按钮级别的java权限后台管理系统>/rbps Maven Webapp/src/main/java/dingzhen/controller/LoginController.java
package dingzhen.controller;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import dingzhen.entity.Log;
import dingzhen.entity.Menu;
import dingzhen.entity.Role;
import dingzhen.entity.Token;
import dingzhen.entity.User;
import dingzhen.service.LogService;
import dingzhen.service.MenuService;
import dingzhen.service.RoleService;
import dingzhen.service.TokenService;
import dingzhen.service.UserService;
import dingzhen.util.CodeUtil;
import dingzhen.util.IpUtil;
import dingzhen.util.StochasticUtil;
import dingzhen.util.StringUtil;
import dingzhen.util.TimeUtil;
import dingzhen.util.WriterUtil;

/**
 *@author: wangq
 *@date: 2015-5-18下午04:27:10
 *@version:
 *@description:
 */
@Controller
@SuppressWarnings("unchecked")
public class LoginController {

	private User user;
	private User currentUser;
	@Autowired
	private UserService<User> userService;
	@Autowired
	private MenuService<Menu> menuService;
	private Role role;
	@Autowired
	private RoleService<Role> roleService;
	private Map map;
	@Autowired
	private LogService<Log> logService;
	private Log log;
	@Autowired
	private TokenService<Token> tokenService;
	private Token token;
	static Logger logger = Logger.getLogger(LoginController.class);
	
	
	@SuppressWarnings("static-access")
	@RequestMapping("login")
	public void login(HttpServletRequest request,HttpServletResponse response){
		try {
			HttpSession session = request.getSession();
			String userName=request.getParameter("userName");
			String password=request.getParameter("password");
			String imageCode=request.getParameter("imageCode");
			String auto = request.getParameter("auto");
			request.setAttribute("userName", userName);
			request.setAttribute("password", password);
			request.setAttribute("imageCode", imageCode);
			if(StringUtil.isEmpty(userName)||StringUtil.isEmpty(password)){
				request.setAttribute("error", "账户或密码为空");
				request.getRequestDispatcher("login.jsp").forward(request, response);
				return;
			}
			if(StringUtil.isEmpty(imageCode)){
				request.setAttribute("error", "验证码为空");
				request.getRequestDispatcher("login.jsp").forward(request, response);
				return;
			}
			if(!imageCode.equals(session.getAttribute("sRand"))){
				request.setAttribute("error", "验证码错误");
				request.getRequestDispatcher("login.jsp").forward(request, response);
				return;
			}
			map = new HashMap<String, String>();
			map.put("userName", userName);
			map.put("password", password);
			currentUser = userService.loginUser(map);
			if(currentUser==null){
				request.setAttribute("error", "用户名或密码错误");
				request.getRequestDispatcher("login.jsp").forward(request, response);
			}else{
				// 加入登陆日志
				log = new Log();
				log.setUserName(userName);
				log.setCreateTime(TimeUtil.formatTime(new Date(), "yyyy-MM-dd HH:mm:ss"));
				log.setIp(IpUtil.getIpAddr(request));
				log.setOperation("登录");
				logService.insertLog(log);
				
				// 登录信息存入session
				role = roleService.findOneRole(currentUser.getRoleId());
				String roleName=role.getRoleName();
				currentUser.setRoleName(roleName);
				session.setAttribute("currentUser", currentUser);  // 当前用户信息
				session.setAttribute("currentOperationIds", role.getOperationIds());  // 当前用户所拥有的按钮权限
				
//				// 勾选了两周内自动登录。
//				if ("1".equals(auto)) {
//					// 记住登录信息
//					token = new Token();
//					token.setUserId(currentUser.getUserId());
//					String userAgent = StochasticUtil.getUUID();
//					token.setUserAgent(CodeUtil.getMd5(userAgent, 32));
//					token.setCreateTime(TimeUtil.formatTime(new Date(), "yyyy-MM-dd HH:mm:ss"));
//					Calendar cal = Calendar.getInstance();
//					cal.add(cal.WEEK_OF_YEAR, 2);
//					token.setExpireTime(TimeUtil.formatTime(cal.getTime(), "yyyy-MM-dd HH:mm:ss"));
//					String t = CodeUtil.getMd5(currentUser.getUserName()+CodeUtil.getMd5(userAgent, 32), 32);
//					token.setToken(t);
//					tokenService.insertToken(token);
//					
//					// 设置cookie
//					Cookie cookie = new Cookie("autoLogin",t);
//					cookie.setMaxAge(3600*24*15);  // cookie时效15天
//					response.addCookie(cookie);
//				}
				
				// 跳转到主界面
				response.sendRedirect("main.htm");
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("用户登录错误",e);
		}
	}
	
	
	// 进入系统主界面
	@RequestMapping("main")
	public String toMain(){
		return "main";
	}
	
	
	// 加载最上级左菜单树
	@RequestMapping("menuTree")
	public void getMenuTree(HttpServletRequest request,HttpServletResponse response){
		try {
			String parentId = request.getParameter("parentId");
			currentUser = (User) request.getSession().getAttribute("currentUser");
			role = roleService.findOneRole(currentUser.getRoleId());
			String[] menuIds = role.getMenuIds().split(",");
			map = new HashMap();
			map.put("parentId",parentId);
			map.put("menuIds", menuIds);
			JSONArray jsonArray = getMenusByParentId(parentId, menuIds);
			WriterUtil.write(response, jsonArray.toString());
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("加载左菜单错误",e);
		}
	}
	
	
	// 递归加载所所有树菜单
	public JSONArray getMenusByParentId(String parentId,String[] menuIds)throws Exception{
		JSONArray jsonArray=this.getMenuByParentId(parentId,menuIds);
		for(int i=0;i<jsonArray.size();i++){
			JSONObject jsonObject=jsonArray.getJSONObject(i);
			if("open".equals(jsonObject.getString("state"))){
				continue;
			}else{
				jsonObject.put("children", getMenusByParentId(jsonObject.getString("id"),menuIds));
			}
		}
		return jsonArray;
	}
	
	
	// 将所有的树菜单放入easyui要求格式的json
	public JSONArray getMenuByParentId(String parentId,String[] menuIds)throws Exception{
		JSONArray jsonArray=new JSONArray();
		map= new HashMap();
		map.put("parentId",parentId);
		map.put("menuIds", menuIds);
		List<Menu> list = menuService.menuTree(map);
		for(Menu menu : list){
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("id", menu.getMenuId());
			jsonObject.put("text", menu.getMenuName());
			jsonObject.put("iconCls", menu.getIconCls());
			JSONObject attributeObject = new JSONObject();
			attributeObject.put("menuUrl", menu.getMenuUrl());
			if(!hasChildren(menu.getMenuId(), menuIds)){
				jsonObject.put("state", "open");
			}else{
				jsonObject.put("state", menu.getState());				
			}
			jsonObject.put("attributes", attributeObject);
			jsonArray.add(jsonObject);
		}
		return jsonArray;
	}
	
	
	// 判断是不是有子孩子,人工结束递归树
	public boolean hasChildren(Integer parentId,String[] menuIds){
		boolean flag = false;
		try {
			map= new HashMap();
			map.put("parentId",parentId);
			map.put("menuIds", menuIds);
			List<Menu> list = menuService.menuTree(map);
			if (list == null || list.size()==0) {
				flag = false;
			}else {
				flag = true;
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("加载左菜单时判断是不是有子孩子错误",e);
		}
		return flag;
	}

	
	
	
	// 更新密码
	@RequestMapping("updatePassword")
	public void updatePassword(HttpServletRequest request,HttpServletResponse response){
		JSONObject result=new JSONObject();
		try {
			String userId=request.getParameter("userId");
			String newPassword=request.getParameter("newPassword");
			user=new User();
			user.setUserId(Integer.parseInt(userId));
			user.setPassword(newPassword);
			userService.updateUser(user);
			result.put("success", "true");
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("密码更新失败",e);
			result.put("success", "true");
			result.put("errorMsg", "对不起!密码修改失败");
		}
		WriterUtil.write(response, result.toString());
	}
	
	
	//安全退出
	@SuppressWarnings("unused")
	@RequestMapping("logout")
	private void logout(HttpServletRequest request,HttpServletResponse response) throws Exception{
		
		// 记录日志
		HttpSession session = request.getSession();
		log.setUserName(((User)session.getAttribute("currentUser")).getUserName());
		log.setCreateTime(TimeUtil.formatTime(new Date(), "yyyy-MM-dd HH:mm:ss"));
		log.setOperation("退出");
		logService.insertLog(log);
		
		// 清空session
		session.invalidate();
		
		// 清空cookie
		Cookie[] cookies = request.getCookies();
		for (int i = 0; i < cookies.length; i++) {
			Cookie cookie = new Cookie(cookies[i].getName(), null);
			cookie.setMaxAge(0);
			response.addCookie(cookie);
		}

		response.sendRedirect("login.jsp");
	}
	
	
	
	/**
	 * 自动登录
	 * @param request
	 * @param response
	 */
	@RequestMapping("auto")
	public void autoLogin(HttpServletRequest request,HttpServletResponse response) throws Exception{
    	Cookie[] cookies = request.getCookies();
    	if(cookies == null) {
    		//request.getRequestDispatcher("login.jsp").forward(request, response);
    		//return;
    		WriterUtil.writePlain(response, "no");
    	} else {
        	for(int i=0; i<cookies.length; i++) {
           		Cookie cookie = cookies[i];
           		if("autoLogin".equals(cookie.getName())){
					  map = new HashMap();
					  map.put("token", cookie.getValue());
					  map.put("expireTime", TimeUtil.formatTime(new Date(),"yyyy-MM-dd HH:mm:ss"));
					  token = tokenService.findOneToken(map);
					  if (token==null) {
						 // request.getRequestDispatcher("login.jsp").forward(request, response);
						  //return;
						  WriterUtil.writePlain(response, "no");
					  } else {
						  	int userId = token.getUserId();
						  	currentUser = userService.findOneUser(userId);
						  	log = new Log();
							log.setUserName(currentUser.getUserName());
							log.setCreateTime(TimeUtil.formatTime(new Date(), "yyyy-MM-dd HH:mm:ss"));
							log.setIp(IpUtil.getIpAddr(request));
							log.setOperation("登录");
							logService.insertLog(log);
							
							// 登录信息存入session
							role = roleService.findOneRole(currentUser.getRoleId());
							String roleName=role.getRoleName();
							currentUser.setRoleName(roleName);
							HttpSession session = request.getSession();
							session.setAttribute("currentUser", currentUser);  // 当前用户信息
							session.setAttribute("currentOperationIds", role.getOperationIds());  // 当前用户所拥有的按钮权限
							// 跳转到主界面
							WriterUtil.writePlain(response, "main");
					  }
           		} else {
           			WriterUtil.writePlain(response, "no");
           		}
        	}
    	}
   
	}
	
	
	
	
	
	

	
	
}
最近下载更多
vitos5n  LV9 2023年5月22日
wanglinddad  LV54 2022年4月24日
liujun0104  LV4 2022年3月29日
做你的英雄  LV14 2022年3月14日
Start1  LV15 2022年3月8日
1214955637  LV2 2021年1月2日
泪染珍珠  LV9 2020年11月3日
wangxc87  LV1 2020年8月3日
吴鑫1998  LV9 2020年6月23日
zhangtian1997  LV10 2020年6月7日
最近浏览更多
wddq123 4月3日
暂无贡献等级
WBelong  LV7 2023年12月26日
漫步的海星  LV4 2023年9月21日
飞呀飞呀飞不放  LV7 2023年8月9日
zhy1989wz  LV6 2023年7月6日
1379585889  LV11 2023年6月7日
zhaoqfan  LV2 2023年5月15日
hao2290211  LV1 2023年4月14日
uni-code_0123  LV1 2023年3月23日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友